package com.ruifu.bom.service;

import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruifu.bom.dto.MaterielImportDTO;
import com.ruifu.bom.vo.MaterielAndVersionsVO;
import com.ruifu.bom.vo.MaterielBom;
import com.ruifu.bom.vo.MaterielBomCondition;
import com.ruifu.common.po.MaterielStructure;

import java.util.List;

/**
 * 结构表业务逻辑层接口
 *
 * @author gqx
 */
public interface MaterielStructureService extends IService<MaterielStructure> {

    /**
     * 保存导入文档数据
     *
     * @param materielImportDTOList
     */
    void saveImport(List<MaterielImportDTO> materielImportDTOList);

    /**
     * bom子物料信息查看
     *
     * @param pMvId 选中节点物料版本id
     * @param mvIds 子节点物料版本id集合
     * @return
     */
    List<MaterielAndVersionsVO> findByIds(Long pMvId, List<Long> mvIds);

    void findMaterielByPid(Long mvId, MaterielBomCondition condition, List<MaterielBom> bomList);

    /**
     * 移除零部件
     *
     * @param mlId
     * @return
     */
    R removeParts(Long pMvId, Long mlId);

    /**
     * 用于何处
     *
     * @param stMaterielId
     * @return
     */
    R useWhere(Long stMaterielId);


    /**
     * 根据物料id，批量添加下级件（需要确保传过来的数据的合法性）
     *
     * @param mlIds 物料id List
     * @param mvId  父节点版本id
     * @return
     */
    R addBomStructureBatch(List<Long> mlIds, Long mvId, String bomType);

    /**
     * 根据物料实体，添加下级件
     *
     * @param cMlId 要插入的子物料id
     * @param mvId  父节点版本id
     * @return
     */
    R addBomStructure(Long cMlId, Long mvId, String bomType);
}
